package com.liuyucheng.designpattern.代理模式.dynamic.jdk;

/**
 * 功能描述：客户端调用
 * jdk动态代理，所代理的类必须是实现了接口的
 * 是基于拦截器和反射实现的
 *
 * 之所以一定要实现接口是因为jdk代理产生的代理类会继承自Proxy类，
 * 然而Java只能单继承多实现，如果想要和代理的类产生联系，
 * 只能是代理的类实现接口，然后代理类也去实现接口
 **/
public class TestJdk {

    public static void main ( String[] args ) {
        System.out.println("**方式一：使用MyInvocationHandler**");
        Producer cosmeticProducer = new CosmeticProducer();
        Producer productProxy = (Producer) ProductProxy.getProductProxy(cosmeticProducer);
        String s = productProxy.produce("欧莱雅男士洗面奶");
        System.out.println("被代理的产品：" + s);



//        System.out.println("**方式二：使用匿名InvocationHandler接口实现类的方式**");
//        ProductProxy proxy = new ProductProxy(new CosmeticProducer());
//        Producer productProxy2 = (Producer) proxy.getProductProxy2();
//        String s1 = productProxy2.produce("兰蔻洁面乳");
//        System.out.println("被代理的产品：" + s1);
    }

}
